﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using VentaElectrodomesticos.Sql;
using VentaElectrodomesticos.Utilities;
using System.Data.SqlClient;

namespace VentaElectrodomesticos.AbmRol
{
    public partial class FormAltaRol : Form
    {
        private ClaseSQL sql = new ClaseSQL();
        private bool esDeModificacion;
        private Rol rol;

        public FormAltaRol(Rol rol, bool esDeModificacion)
        {
            InitializeComponent();
            this.esDeModificacion = esDeModificacion;
            this.rol = rol;


            sql.llenarCombo(cbFuncionalidad, "SELECT idFuncionalidad, nomFuncionalidad FROM LAG.funcionalidades");

            if (esDeModificacion)
            {
                this.Text = "Formulario de modificacion de rol";
                this.tbRol.Text = rol.nomRol;

                if (rol.status.Equals('0'))
                {
                    btnHabilitar.Visible = true;
                }

                try
                {
                    sql.Open();
                    SqlDataReader reader = sql.busquedaSQLDataReader("SELECT rf.idFuncionalidad, f.nomFuncionalidad FROM LAG.roles_funcionalidades rf LEFT JOIN LAG.funcionalidades f ON rf.idFuncionalidad = f.idFuncionalidad WHERE rf.idRol = " + rol.idRol.ToString());

                    while (reader.Read())
                    {
                        dataGridView1.Rows.Add( reader["idFuncionalidad"], reader["nomFuncionalidad"].ToString() );
                    }
                }
                catch (SqlException ex)
                {
                    MessageBox.Show(ex.Message, "Error!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.StackTrace, "Error app");
                }
                finally
                {
                    sql.Close();
                }
            }

        }

        private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            if (dataGridView1.CurrentCell.ColumnIndex == 2)
            {
                this.dataGridView1.Rows.RemoveAt(this.dataGridView1.CurrentRow.Index);
            }
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            bool vFunc = !Utils.campoVacio(cbFuncionalidad, errorProvider, "Seleccione una funcionalidad");
            bool campoYaAgregado = false;            

            if (vFunc)
            {
                KeyValuePair funcionalidad = (KeyValuePair)cbFuncionalidad.SelectedItem;

                foreach (DataGridViewRow row in dataGridView1.Rows)
                {
                    if (row.Cells["idFuncionalidad"].Value.ToString().Equals(funcionalidad.Key.ToString()))
                    {
                        campoYaAgregado = true;
                        break;
                    }
                }

                if (!campoYaAgregado)
                {
                    this.dataGridView1.Rows.Add(funcionalidad.Key.ToString(), funcionalidad.Value.ToString());
                }
            }
        }

        private void btnAceptar_Click(object sender, EventArgs e)
        {
            if (validar())
            {
                if (esDeModificacion)
                {
                    modificarRol();
                }
                else
                {
                    altaDeRol();
                }

            }
            else
            {
                MessageBox.Show("Hay campos con datos no validos", "Error");
            }
        }

        private void altaDeRol()
        {
            try
            {
                sql.Open();
                String[,] parametros = new String[2, 2];

                String sp = "LAG.sp_altaRol" /*"LAG.sp_ModificarRol"*/;
                parametros[0, 0] = "@nombre";
                parametros[1, 0] = tbRol.Text;
                parametros[0, 1] = "@funcionalidades";

                for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
                {
                    parametros[1, 1] += "¦" + dataGridView1["idFuncionalidad", i].Value.ToString();
                }
                SqlDataReader reader = sql.ejecutarStoredProcedure(sp, parametros);
                this.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Error!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace, "Error app");
            }
            finally
            {
                sql.Close();
            }
        }

        private void modificarRol()
        {
            try
            {
                sql.Open();
                String[,] parametros = new String[2, 3];

                String sp = "LAG.sp_ModificarRol";

                parametros[0, 0] = "@idRol";
                parametros[1, 0] = rol.idRol.ToString();
                parametros[0, 1] = "@nombre";
                parametros[1, 1] = tbRol.Text;
                parametros[0, 2] = "@funcionalidades";

                for (int i = 0; i < this.dataGridView1.Rows.Count; i++)
                {
                    parametros[1, 2] += "¦" + dataGridView1["idFuncionalidad", i].Value.ToString();
                }
                SqlDataReader reader = sql.ejecutarStoredProcedure(sp, parametros);
                this.Close();
            }
            catch (SqlException ex)
            {
                MessageBox.Show(ex.Message, "Error!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.StackTrace, "Error app");
            }
            finally
            {
                sql.Close();
            }
        }

        private bool validar()
        {
            bool vDGV = !Utils.campoVacio(dataGridView1, errorProvider, "Seleccione al menos una funcionalidad");
            bool vNombre = !Utils.campoVacio(tbRol, errorProvider, "Ingrese un nombre");

            return vDGV && vNombre;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void btnHabilitar_Click(object sender, EventArgs e)
        {
            bool habilitado = sql.habilitarRegistro("LAG.roles", "idRol", rol.idRol.ToString());

            if (habilitado)
            {
                btnHabilitar.Visible = false;
            }
        }

        
    }
}
